require(openxlsx)
require(ggplot2)
require(data.table)
require(skimr)
require(GGally)
require(ggcorrplot)
require(forecast)
require(lubridate)
require(repr)
require(lmtest)
options(repr.plot.width=12.7, repr.plot.height=8.5)
data_path = '/Users/ahmetceliker/Desktop/IE 360 HW1/toplamkredihacmi.xlsx'
kredi=read.xlsx(data_path,sheet='data')
str(kredi)
'data.frame': 157 obs. of 2 variables:
$ KrediHacmi : num 186455 360381 315900 359423 330227 ...
$ MevduatFaizOrani: num 16.2 16.5 16.8 17.8 17.9 ...
summary_data=skim(kredi)
print(summary_data)
── Data Summary ────────────────────────
Values
Name kredi
Number of rows 157
Number of columns 2
_______________________
Column type frequency:
numeric 2
________________________
Group variables None
kredi=data.table(kredi)
str(kredi)
Classes ‘data.table’ and 'data.frame': 157 obs. of 2 variables:
$ KrediHacmi : num 186455 360381 315900 359423 330227 ...
$ MevduatFaizOrani: num 16.2 16.5 16.8 17.8 17.9 ...
- attr(*, ".internal.selfref")=<externalptr>
correl_info=cor(kredi)
ggcorrplot(correl_info,
hc.order = TRUE,
type = "lower",
lab = TRUE)

ggplot(kredi, aes(x=MevduatFaizOrani,y=KrediHacmi)) + geom_point()

l_fit = lm(KrediHacmi~.,data=kredi)
l_fit
Call:
lm(formula = KrediHacmi ~ ., data = kredi)
Coefficients:
(Intercept) MevduatFaizOrani
-2001352 155139
summary(l_fit)
Call:
lm(formula = KrediHacmi ~ ., data = kredi)
Residuals:
Min 1Q Median 3Q Max
-2168190 -370139 17706 239810 3060022
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -2001352 147478 -13.57 <2e-16 ***
MevduatFaizOrani 155139 6034 25.71 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 729800 on 155 degrees of freedom
Multiple R-squared: 0.8101, Adjusted R-squared: 0.8089
F-statistic: 661.1 on 1 and 155 DF, p-value: < 2.2e-16
plot(l_fit)



NA

ggplot(kredi, aes(x=MevduatFaizOrani,y=KrediHacmi)) + geom_point() +geom_smooth(method='lm')

ggplot(kredi, aes(x=MevduatFaizOrani,y=KrediHacmi)) + geom_point()+geom_smooth(method='loess')

summary(l_fit)
Call:
lm(formula = KrediHacmi ~ ., data = kredi)
Residuals:
Min 1Q Median 3Q Max
-2168190 -370139 17706 239810 3060022
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -2001352 147478 -13.57 <2e-16 ***
MevduatFaizOrani 155139 6034 25.71 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 729800 on 155 degrees of freedom
Multiple R-squared: 0.8101, Adjusted R-squared: 0.8089
F-statistic: 661.1 on 1 and 155 DF, p-value: < 2.2e-16
kredi[, trnd := 1:.N]
head(kredi)
lm_trend=lm(KrediHacmi~trnd,kredi)
summary(lm_trend)
Call:
lm(formula = KrediHacmi ~ trnd, data = kredi)
Residuals:
Min 1Q Median 3Q Max
-2188841 -887412 -99229 659532 3394148
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -737087 172915 -4.263 3.5e-05 ***
trnd 28095 1899 14.798 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1078000 on 155 degrees of freedom
Multiple R-squared: 0.5855, Adjusted R-squared: 0.5829
F-statistic: 219 on 1 and 155 DF, p-value: < 2.2e-16
# New Model with Trend
l_fit_trend <- lm(KrediHacmi ~ MevduatFaizOrani + trnd, data = kredi)
# Summary of New Model with Trend
summary(l_fit_trend)
Call:
lm(formula = KrediHacmi ~ MevduatFaizOrani + trnd, data = kredi)
Residuals:
Min 1Q Median 3Q Max
-2281143 -139800 865 180901 2974794
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -1994883 141514 -14.10 < 2e-16 ***
MevduatFaizOrani 129646 8874 14.61 < 2e-16 ***
trnd 7165 1890 3.79 0.000216 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 700300 on 154 degrees of freedom
Multiple R-squared: 0.8263, Adjusted R-squared: 0.824
F-statistic: 366.3 on 2 and 154 DF, p-value: < 2.2e-16
bptest(l_fit_trend)
studentized Breusch-Pagan test
data: l_fit_trend
BP = 39.006, df = 2, p-value = 3.387e-09
ggplot(kredi, aes(x = MevduatFaizOrani, y = KrediHacmi)) +
geom_point() +
geom_smooth(
aes(y = predict(l_fit_trend, newdata = data.frame(MevduatFaizOrani = kredi$MevduatFaizOrani, trnd = kredi$trnd))),
method = 'lm',
color = 'blue',
linetype = 'solid'
)

checkresiduals(l_fit_trend$residuals)
Ljung-Box test
data: Residuals
Q* = 273.67, df = 10, p-value < 2.2e-16
Model df: 0. Total lags used: 10

require(tseries)
adf.test(kredi$KrediHacmi)
Augmented Dickey-Fuller Test
data: kredi$KrediHacmi
Dickey-Fuller = -1.9459, Lag order = 5, p-value = 0.5989
alternative hypothesis: stationary
adf.test(l_fit_trend$residuals)
Augmented Dickey-Fuller Test
data: l_fit_trend$residuals
Dickey-Fuller = -3.2027, Lag order = 5, p-value = 0.08997
alternative hypothesis: stationary
summary(kredi)
KrediHacmi MevduatFaizOrani trnd
Min. : 76672 Min. :14.99 Min. : 1
1st Qu.: 531439 1st Qu.:16.31 1st Qu.: 40
Median : 755564 Median :17.87 Median : 79
Mean :1482443 Mean :22.46 Mean : 79
3rd Qu.:1144085 3rd Qu.:24.81 3rd Qu.:118
Max. :6421834 Max. :47.82 Max. :157
str(kredi)
Classes ‘data.table’ and 'data.frame': 157 obs. of 3 variables:
$ KrediHacmi : num 186455 360381 315900 359423 330227 ...
$ MevduatFaizOrani: num 16.2 16.5 16.8 17.8 17.9 ...
$ trnd : int 1 2 3 4 5 6 7 8 9 10 ...
- attr(*, ".internal.selfref")=<externalptr>
# Differencing the relevant variables
kredi_diff <- kredi[, lapply(.SD, diff), .SDcols = c("KrediHacmi", "MevduatFaizOrani")]
# Checking the first few rows of the differenced dataset
head(kredi_diff)
# Model without trend and with differencing
l_fit_diff_simple <- lm(KrediHacmi ~ MevduatFaizOrani, data = kredi_diff)
# Summary of the model
summary(l_fit_diff_simple)
Call:
lm(formula = KrediHacmi ~ MevduatFaizOrani, data = kredi_diff)
Residuals:
Min 1Q Median 3Q Max
-2715376 -111746 -35167 74200 2562642
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 36857 45218 0.815 0.416
MevduatFaizOrani -67273 50969 -1.320 0.189
Residual standard error: 549900 on 154 degrees of freedom
Multiple R-squared: 0.01119, Adjusted R-squared: 0.004765
F-statistic: 1.742 on 1 and 154 DF, p-value: 0.1888
ggplot(kredi_diff, aes(x=MevduatFaizOrani,y=KrediHacmi)) + geom_point() +geom_smooth(method='lm')

# Applying log transformation to KrediHacmi variable
kredi$KrediHacmi <- log(kredi$KrediHacmi + 1) # Adding 1 to avoid log(0) errors
# Fit a new model with the log-transformed KrediHacmi variable
l_fit_log <- lm(KrediHacmi ~ MevduatFaizOrani + trnd, data = kredi)
# Summary of the new model with the log-transformed KrediHacmi variable
summary(l_fit_log)
Call:
lm(formula = KrediHacmi ~ MevduatFaizOrani + trnd, data = kredi)
Residuals:
Min 1Q Median 3Q Max
-1.61144 -0.08962 0.03193 0.14094 0.82966
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.198e+01 6.563e-02 182.588 < 2e-16 ***
MevduatFaizOrani 3.537e-02 4.116e-03 8.595 8.78e-15 ***
trnd 1.224e-02 8.766e-04 13.961 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.3247 on 154 degrees of freedom
Multiple R-squared: 0.873, Adjusted R-squared: 0.8714
F-statistic: 529.5 on 2 and 154 DF, p-value: < 2.2e-16
checkresiduals(l_fit_log)
Breusch-Godfrey test for serial correlation of order up to 10
data: Residuals
LM test = 61.484, df = 10, p-value = 1.896e-09

adf.test(kredi$KrediHacmi)
Augmented Dickey-Fuller Test
data: kredi$KrediHacmi
Dickey-Fuller = -2.0239, Lag order = 5, p-value = 0.5664
alternative hypothesis: stationary
adf.test(l_fit_log$residuals)
Augmented Dickey-Fuller Test
data: l_fit_log$residuals
Dickey-Fuller = -2.9294, Lag order = 5, p-value = 0.1889
alternative hypothesis: stationary
ggplot(kredi_diff, aes(x=MevduatFaizOrani,y=KrediHacmi)) + geom_point() +geom_smooth(method='lm')

weights <- 1 / abs(l_fit_log$residuals)
l_fit_wls <- lm(KrediHacmi ~ MevduatFaizOrani + trnd, data = kredi, weights = weights)
summary(l_fit_wls)
Call:
lm(formula = KrediHacmi ~ MevduatFaizOrani + trnd, data = kredi,
weights = weights)
Weighted Residuals:
Min 1Q Median 3Q Max
-1.2845 -0.3146 0.1517 0.3611 0.9091
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.199e+01 2.034e-02 589.44 <2e-16 ***
MevduatFaizOrani 3.632e-02 1.293e-03 28.09 <2e-16 ***
trnd 1.194e-02 2.802e-04 42.61 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.4589 on 154 degrees of freedom
Multiple R-squared: 0.9829, Adjusted R-squared: 0.9826
F-statistic: 4416 on 2 and 154 DF, p-value: < 2.2e-16
checkresiduals(l_fit_wls)
Breusch-Godfrey test for serial correlation of order up to 10
data: Residuals
LM test = 61.484, df = 10, p-value = 1.896e-09

kredi$week_number <- seq(1, nrow(kredi))
head(kredi,50)
plot(log10(abs(fft_kredi)), main = "Kredi Hacmi DFT (Logaritmik)", xlab = "Frekans", ylab = "Genlik")

NA
NA
plot(l_fit_wls)




acf(l_fit_wls$residuals,200)

mean(l_fit_wls$residuals)
[1] -0.006567294
cor(l_fit_wls$residuals, kredi$MevduatFaizOrani)
[1] 0.003459535
cor(l_fit_wls$residuals, kredi$trnd)
[1] 0.02051802
#to find seasonality index
ggplot(kredi[week_number>1 & week_number<300] ,aes(x=week_number)) +
geom_line(aes(y=KrediHacmi,color='real'))

data_to_plot <- kredi
y_label <- "Kredi Hacmi"
ggplot(data_to_plot, aes(x = trnd, y = KrediHacmi)) +
geom_point(size = 3) + # Adjust point size as desired
labs(title = "Trend vs. Kredi Hacmi",
x = "Trend",
y = y_label)

NA
#monthly seasonality with lag of 20) fourier seris
kredi$seasonality_sin <- sin(2*pi * ((kredi$week_number - 1) %% 20) / 20) # Her 20 haftada bir sinüs mevsimsellik
kredi$seasonality_cos <- cos(2*pi * ((kredi$week_number - 1) %% 20) / 20) # Her 20 haftada bir kosinüs mevsimsellik
l_fit_wls_fourier <- lm(KrediHacmi ~ MevduatFaizOrani + trnd + seasonality_sin + seasonality_cos, data = kredi, weights = weights)
summary(l_fit_wls_fourier)
Call:
lm(formula = KrediHacmi ~ MevduatFaizOrani + trnd + seasonality_sin +
seasonality_cos, data = kredi, weights = weights)
Weighted Residuals:
Min 1Q Median 3Q Max
-1.2873 -0.3189 0.1385 0.3597 0.9079
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 11.9913211 0.0204989 584.975 <2e-16 ***
MevduatFaizOrani 0.0363616 0.0013157 27.636 <2e-16 ***
trnd 0.0119437 0.0002844 42.000 <2e-16 ***
seasonality_sin -0.0014364 0.0124132 -0.116 0.908
seasonality_cos 0.0029665 0.0121175 0.245 0.807
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.4618 on 152 degrees of freedom
Multiple R-squared: 0.9829, Adjusted R-squared: 0.9824
F-statistic: 2180 on 4 and 152 DF, p-value: < 2.2e-16
checkresiduals(l_fit_wls_fourier)
Breusch-Godfrey test for serial correlation of order up to 10
data: Residuals
LM test = 60.996, df = 10, p-value = 2.347e-09

ggplot(kredi, aes(x = MevduatFaizOrani, y = KrediHacmi)) +
geom_point(alpha = 0.5) + # Adjust alpha for point transparency
geom_smooth(
method = 'lm',
aes(y = predict(l_fit_wls_fourier, newdata = data.frame(MevduatFaizOrani = kredi$MevduatFaizOrani, trnd = kredi$trnd, seasonality_sin = kredi$seasonality_sin, seasonality_cos = kredi$seasonality_cos))),
color = 'blue',
linetype = 'solid'
) +
labs(title = "Fitted Model with WLS, Trend, and Fourier Features",
x = "MevduatFaizOrani",
y = "Kredi Hacmi")

#Checking all assumpitons of linear regression model:
# Check if mean of residuals is close to zero
mean(residuals(l_fit_wls_fourier))
[1] -0.007431915
#Check for autocorrelation in residuals
acf(residuals(l_fit_wls_fourier))

pacf(residuals(l_fit_wls_fourier))

summary(l_fit_wls_fourier)
Call:
lm(formula = KrediHacmi ~ MevduatFaizOrani + trnd + seasonality_sin +
seasonality_cos, data = kredi, weights = weights)
Weighted Residuals:
Min 1Q Median 3Q Max
-1.2873 -0.3189 0.1385 0.3597 0.9079
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 11.9913211 0.0204989 584.975 <2e-16 ***
MevduatFaizOrani 0.0363616 0.0013157 27.636 <2e-16 ***
trnd 0.0119437 0.0002844 42.000 <2e-16 ***
seasonality_sin -0.0014364 0.0124132 -0.116 0.908
seasonality_cos 0.0029665 0.0121175 0.245 0.807
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.4618 on 152 degrees of freedom
Multiple R-squared: 0.9829, Adjusted R-squared: 0.9824
F-statistic: 2180 on 4 and 152 DF, p-value: < 2.2e-16
checkresiduals(l_fit_wls_fourier)
Breusch-Godfrey test for serial correlation of order up to 10
data: Residuals
LM test = 60.996, df = 10, p-value = 2.347e-09

checkresiduals(l_fit_wls_fourier)
Breusch-Godfrey test for serial correlation of order up to 10
data: Residuals
LM test = 60.996, df = 10, p-value = 2.347e-09

# Include lags of residuals as predictors (adjust lags as needed)
l_fit_wls_fourier_ar <- lm(KrediHacmi ~ MevduatFaizOrani + trnd + seasonality_sin + seasonality_cos +
residuals(l_fit_wls_fourier) + stats::lag(residuals(l_fit_wls_fourier), 2),
data = kredi, weights = weights)
# Check autocorrelation in residuals of the new model (l_fit_wls_fourier_ar)
acf(residuals(l_fit_wls_fourier_ar))

pacf(residuals(l_fit_wls_fourier_ar))

data_path="/Users/ahmetceliker/Desktop/IE 360 HW1/arabaüretimi.xlsx"
arabafiyat=read.xlsx(data_path)
arabafiyat$Tarih <- ym(arabafiyat$Tarih)
str(arabafiyat)
'data.frame': 169 obs. of 4 variables:
$ Tarih : Date, format: "2010-01-01" "2010-02-01" "2010-03-01" "2010-04-01" ...
$ KrediFaizi: num 13.2 13.3 12.7 12 11.7 ...
$ ArabaFiyat: num 115 115 116 116 116 ...
$ UretimAdet: num 46810 46365 55755 51459 57433 ...
summary_data=skim(arabafiyat)
print(arabafiyat)
arabafiyat2 <- arabafiyat[, -which(names(arabafiyat) == "Tarih")]
# Check the structure of the new data frame
str(arabafiyat2)
'data.frame': 169 obs. of 3 variables:
$ KrediFaizi: num 13.2 13.3 12.7 12 11.7 ...
$ ArabaFiyat: num 115 115 116 116 116 ...
$ UretimAdet: num 46810 46365 55755 51459 57433 ...
correl_info=cor(arabafiyat2)
ggcorrplot(correl_info,
hc.order = TRUE,
type = "lower",
lab = TRUE)

ggplot(arabafiyat2, aes(x=KrediFaizi,y=ArabaFiyat)) + geom_point()

ggpairs(arabafiyat2)

l_fit = lm(ArabaFiyat~.,data=arabafiyat2)
l_fit
Call:
lm(formula = ArabaFiyat ~ ., data = arabafiyat2)
Coefficients:
(Intercept) KrediFaizi UretimAdet
-3.533e+02 4.494e+01 -9.686e-04
summary(l_fit)
Call:
lm(formula = ArabaFiyat ~ ., data = arabafiyat2)
Residuals:
Min 1Q Median 3Q Max
-669.14 -70.62 -2.37 74.20 605.43
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -3.533e+02 6.029e+01 -5.859 2.43e-08 ***
KrediFaizi 4.494e+01 2.163e+00 20.776 < 2e-16 ***
UretimAdet -9.686e-04 8.448e-04 -1.147 0.253
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 202.9 on 166 degrees of freedom
Multiple R-squared: 0.7371, Adjusted R-squared: 0.7339
F-statistic: 232.7 on 2 and 166 DF, p-value: < 2.2e-16
plot(l_fit)




ggplot(arabafiyat2, aes(x=KrediFaizi,y=ArabaFiyat)) + geom_point()+ geom_smooth(method='lm')

ggplot(arabafiyat2, aes(x=KrediFaizi,y=ArabaFiyat)) + geom_point()+ geom_smooth(method='loess')

ggplot(arabafiyat2, aes(x=UretimAdet,y=ArabaFiyat)) + geom_point()+ geom_smooth(method='lm')

ggplot(arabafiyat2, aes(x=UretimAdet,y=ArabaFiyat)) + geom_point()+ geom_smooth(method='loess')

ggplot(arabafiyat, aes(x = Tarih, y = ArabaFiyat)) +
geom_line(color = "blue") +
labs(title = "Araba Satış Fiyatı", x = "Tarih", y = "Satış Fiyatı")

arabafiyat$ArabaFiyat <- log(arabafiyat$ArabaFiyat + 1)
summary(arabafiyat)
Tarih KrediFaizi ArabaFiyat UretimAdet
Min. :2010-01-01 Min. : 9.607 Min. :4.735 Min. : 9661
1st Qu.:2013-07-01 1st Qu.:12.818 1st Qu.:4.935 1st Qu.: 54046
Median :2017-01-01 Median :15.197 Median :5.368 Median : 66976
Mean :2016-12-30 Mean :17.908 Mean :5.612 Mean : 68207
3rd Qu.:2020-07-01 3rd Qu.:22.032 3rd Qu.:6.006 3rd Qu.: 85368
Max. :2024-01-01 Max. :46.520 Max. :7.506 Max. :109443
l_fit_log <- lm(ArabaFiyat~., data=arabafiyat)
summary(l_fit_log)
Call:
lm(formula = ArabaFiyat ~ ., data = arabafiyat)
Residuals:
Min 1Q Median 3Q Max
-0.49044 -0.09496 -0.00906 0.13274 0.39496
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -1.406e+00 2.159e-01 -6.513 8.51e-10 ***
Tarih 3.915e-04 1.544e-05 25.360 < 2e-16 ***
KrediFaizi 2.995e-02 2.832e-03 10.575 < 2e-16 ***
UretimAdet -3.486e-06 7.994e-07 -4.360 2.28e-05 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.1804 on 165 degrees of freedom
Multiple R-squared: 0.9455, Adjusted R-squared: 0.9445
F-statistic: 954.7 on 3 and 165 DF, p-value: < 2.2e-16
ggplot(arabafiyat, aes(x = Tarih, y = ArabaFiyat)) +
geom_line(color = "blue") +
labs(title = "Araba Satış Fiyatı Log Transformed", x = "Tarih", y = "Satış Fiyatı Log")

ggplot(arabafiyat, aes(x = Tarih, y = KrediFaizi)) +
geom_line(color = "blue") +
labs(title = "Araba Kredi Faizi", x = "Tarih", y = "KrediFaizi")

logtransformed = copy(arabafiyat)
logtransformed$KrediFaizi <- log(logtransformed$KrediFaizi + 1)
summary(logtransformed)
Tarih KrediFaizi ArabaFiyat UretimAdet
Min. :2010-01-01 Min. :2.362 Min. :4.735 Min. : 9661
1st Qu.:2013-07-01 1st Qu.:2.626 1st Qu.:4.935 1st Qu.: 54046
Median :2017-01-01 Median :2.785 Median :5.368 Median : 66976
Mean :2016-12-30 Mean :2.873 Mean :5.612 Mean : 68207
3rd Qu.:2020-07-01 3rd Qu.:3.137 3rd Qu.:6.006 3rd Qu.: 85368
Max. :2024-01-01 Max. :3.861 Max. :7.506 Max. :109443
head(logtransformed)
l_fit_log <- lm(ArabaFiyat~., data=logtransformed)
summary(l_fit_log)
Call:
lm(formula = ArabaFiyat ~ ., data = logtransformed)
Residuals:
Min 1Q Median 3Q Max
-0.4758 -0.1211 -0.0206 0.1330 0.4633
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -2.637e+00 1.825e-01 -14.452 < 2e-16 ***
Tarih 3.934e-04 1.870e-05 21.043 < 2e-16 ***
KrediFaizi 6.103e-01 7.624e-02 8.005 2.02e-13 ***
UretimAdet -3.777e-06 8.779e-07 -4.302 2.89e-05 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.1983 on 165 degrees of freedom
Multiple R-squared: 0.9342, Adjusted R-squared: 0.933
F-statistic: 780.5 on 3 and 165 DF, p-value: < 2.2e-16
ggplot(logtransformed, aes(x = Tarih, y = KrediFaizi)) +
geom_line(color = "blue") +
labs(title = "Kredi Faizi Log Transformed", x = "Tarih", y = "Satış Fiyatı")

"After applying the logarithmic transformation, there wasn't a significant change, so there's no need to take the logarithm of the credit interest rate data."
[1] "After applying the logarithmic transformation, there wasn't a significant change, so there's no need to take the logarithm of the credit interest rate data."
ggplot(arabafiyat, aes(x = Tarih, y = UretimAdet)) +
geom_line(color = "blue") +
labs(title = "Araba Uretim Adedi", x = "Tarih", y = "Uretim")

logtransformed$UretimAdet <- log(logtransformed$UretimAdet + 1)
summary(logtransformed)
Tarih KrediFaizi ArabaFiyat UretimAdet
Min. :2010-01-01 Min. :2.362 Min. :4.735 Min. : 9.176
1st Qu.:2013-07-01 1st Qu.:2.626 1st Qu.:4.935 1st Qu.:10.898
Median :2017-01-01 Median :2.785 Median :5.368 Median :11.112
Mean :2016-12-30 Mean :2.873 Mean :5.612 Mean :11.082
3rd Qu.:2020-07-01 3rd Qu.:3.137 3rd Qu.:6.006 3rd Qu.:11.355
Max. :2024-01-01 Max. :3.861 Max. :7.506 Max. :11.603
head(logtransformed)
l_fit_log <- lm(ArabaFiyat~., data=logtransformed)
summary(l_fit_log)
Call:
lm(formula = ArabaFiyat ~ ., data = logtransformed)
Residuals:
Min 1Q Median 3Q Max
-0.47056 -0.11835 -0.02039 0.14232 0.47624
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -9.182e-01 5.179e-01 -1.773 0.07810 .
Tarih 3.839e-04 1.876e-05 20.463 < 2e-16 ***
KrediFaizi 6.200e-01 7.791e-02 7.959 2.65e-13 ***
UretimAdet -1.662e-01 5.065e-02 -3.281 0.00126 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.2026 on 165 degrees of freedom
Multiple R-squared: 0.9313, Adjusted R-squared: 0.93
F-statistic: 745.3 on 3 and 165 DF, p-value: < 2.2e-16
ggplot(logtransformed, aes(x = Tarih, y = UretimAdet)) +
geom_line(color = "blue") +
labs(title = "Araba Uretim Adedi Log Transformed", x = "Tarih", y = "Satış Fiyatı")

library(dplyr)
logtransformed <- logtransformed %>% mutate(trnd = row_number())
summary(logtransformed)
Tarih KrediFaizi ArabaFiyat UretimAdet trnd
Min. :2010-01-01 Min. :2.362 Min. :4.735 Min. : 9.176 Min. : 1
1st Qu.:2013-07-01 1st Qu.:2.626 1st Qu.:4.935 1st Qu.:10.898 1st Qu.: 43
Median :2017-01-01 Median :2.785 Median :5.368 Median :11.112 Median : 85
Mean :2016-12-30 Mean :2.873 Mean :5.612 Mean :11.082 Mean : 85
3rd Qu.:2020-07-01 3rd Qu.:3.137 3rd Qu.:6.006 3rd Qu.:11.355 3rd Qu.:127
Max. :2024-01-01 Max. :3.861 Max. :7.506 Max. :11.603 Max. :169
l_trend <- lm(ArabaFiyat~ KrediFaizi + UretimAdet + trnd ,data=logtransformed)
summary(l_trend)
Call:
lm(formula = ArabaFiyat ~ KrediFaizi + UretimAdet + trnd, data = logtransformed)
Residuals:
Min 1Q Median 3Q Max
-0.47025 -0.11820 -0.02045 0.14210 0.47620
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.6795951 0.5773079 8.106 1.12e-13 ***
KrediFaizi 0.6198389 0.0779037 7.956 2.69e-13 ***
UretimAdet -0.1661928 0.0506488 -3.281 0.00126 **
trnd 0.0116872 0.0005711 20.466 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.2026 on 165 degrees of freedom
Multiple R-squared: 0.9313, Adjusted R-squared: 0.93
F-statistic: 745.5 on 3 and 165 DF, p-value: < 2.2e-16
checkresiduals(l_trend$residuals)
Ljung-Box test
data: Residuals
Q* = 895.98, df = 10, p-value < 2.2e-16
Model df: 0. Total lags used: 10

library(tseries)
kpss_test_result <- adf.test(residuals(l_trend), alternative = "stationary")
kpss_test_result
Augmented Dickey-Fuller Test
data: residuals(l_trend)
Dickey-Fuller = -1.1829, Lag order = 5, p-value = 0.9066
alternative hypothesis: stationary
plot(residuals(l_trend))

acf(residuals(l_trend))

pacf(residuals(l_trend))

plot(l_trend)




logtransformed <- as.data.table(logtransformed)
head(logtransformed)
# Differencing the relevant variables
logtransformeddiff <- logtransformed[, lapply(.SD, diff), .SDcols = c("KrediFaizi", "ArabaFiyat", "UretimAdet")]
# Checking the first few rows of the differenced dataset
head(logtransformeddiff)
logtransformeddiff[, trnd := 1:.N]
# Model without trend and with differencing
l_fit_log_diff<- lm(ArabaFiyat ~ KrediFaizi + UretimAdet+trnd, data = logtransformeddiff)
# Summary of the model
summary(l_fit_log_diff)
Call:
lm(formula = ArabaFiyat ~ KrediFaizi + UretimAdet + trnd, data = logtransformeddiff)
Residuals:
Min 1Q Median 3Q Max
-0.146312 -0.012372 -0.002325 0.008871 0.289973
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -1.107e-03 5.197e-03 -0.213 0.831625
KrediFaizi 2.093e-01 3.701e-02 5.655 6.79e-08 ***
UretimAdet 5.444e-03 6.973e-03 0.781 0.436095
trnd 1.896e-04 5.359e-05 3.539 0.000524 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.0335 on 164 degrees of freedom
Multiple R-squared: 0.2319, Adjusted R-squared: 0.2179
F-statistic: 16.51 on 3 and 164 DF, p-value: 2.017e-09
require(tseries)
adf.test(logtransformeddiff$ArabaFiyat)
Warning: p-value smaller than printed p-value
Augmented Dickey-Fuller Test
data: logtransformeddiff$ArabaFiyat
Dickey-Fuller = -5.9502, Lag order = 5, p-value = 0.01
alternative hypothesis: stationary
adf.test(l_fit_log_diff$residuals)
Warning: p-value smaller than printed p-value
Augmented Dickey-Fuller Test
data: l_fit_log_diff$residuals
Dickey-Fuller = -5.4057, Lag order = 5, p-value = 0.01
alternative hypothesis: stationary
"test results give both araba fiyat and residuals of the model are stationary"
[1] "test results give both araba fiyat and residuals of the model are stationary"
ggplot(logtransformeddiff, aes(x=UretimAdet,y=ArabaFiyat)) + geom_point()+ geom_smooth(method='lm')

ggplot(logtransformeddiff, aes(x=UretimAdet,y=ArabaFiyat)) + geom_point()+ geom_smooth(method='loess')

ggplot(logtransformeddiff, aes(x=KrediFaizi,y=ArabaFiyat)) + geom_point()+ geom_smooth(method='lm')

ggplot(logtransformeddiff, aes(x=KrediFaizi,y=ArabaFiyat)) + geom_point()+ geom_smooth(method='loess')

plot(l_fit_log_diff)




l_diff_log_withouttrend <- lm(ArabaFiyat ~ KrediFaizi + UretimAdet , data = logtransformeddiff)
summary(l_diff_log_withouttrend)
Call:
lm(formula = ArabaFiyat ~ KrediFaizi + UretimAdet, data = logtransformeddiff)
Residuals:
Min 1Q Median 3Q Max
-0.141314 -0.013205 -0.005323 0.007244 0.299228
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.014822 0.002686 5.518 1.30e-07 ***
KrediFaizi 0.223191 0.038069 5.863 2.41e-08 ***
UretimAdet 0.005364 0.007213 0.744 0.458
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.03465 on 165 degrees of freedom
Multiple R-squared: 0.1733, Adjusted R-squared: 0.1633
F-statistic: 17.29 on 2 and 165 DF, p-value: 1.517e-07
ggplot(logtransformeddiff, aes(x = trnd, y = ArabaFiyat)) +
geom_line(color = "blue") +
labs(x = "Tarih", y = "Satış Fiyatı")

transformed_diff=copy(logtransformeddiff[-c(114,143,106)])
ggplot(transformed_diff, aes(x = trnd, y = ArabaFiyat)) +
geom_line(color = "blue") +
labs(x = "Tarih", y = "Satış Fiyatı")

ggplot(logtransformeddiff, aes(x = KrediFaizi, y = ArabaFiyat)) +
geom_line(color = "blue") +
labs(x = "Kredi Faizi", y = "Satış Fiyatı")

ggplot(logtransformeddiff, aes(x = UretimAdet, y = ArabaFiyat)) +
geom_line(color = "blue") +
labs(x = "Uretim Adet", y = "Satış Fiyatı")

l_fit_log_diff<- lm(ArabaFiyat ~ KrediFaizi + UretimAdet+trnd, data = transformed_diff)
plot(l_fit_log_diff)




summary(l_fit_log_diff)
Call:
lm(formula = ArabaFiyat ~ KrediFaizi + UretimAdet + trnd, data = transformed_diff)
Residuals:
Min 1Q Median 3Q Max
-0.048809 -0.011016 -0.002450 0.008614 0.093178
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 7.904e-04 3.194e-03 0.247 0.805
KrediFaizi 1.566e-01 2.306e-02 6.788 2.07e-10 ***
UretimAdet 3.158e-03 4.286e-03 0.737 0.462
trnd 1.549e-04 3.309e-05 4.680 6.06e-06 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.02057 on 161 degrees of freedom
Multiple R-squared: 0.3183, Adjusted R-squared: 0.3055
F-statistic: 25.05 on 3 and 161 DF, p-value: 2.35e-13
weights <- 1 / abs(l_fit_log_diff$residuals)
l_fit_log_diff_wls <- lm(ArabaFiyat ~ KrediFaizi + UretimAdet + trnd, data = transformed_diff, weights = weights)
summary(l_fit_log_diff_wls)
Call:
lm(formula = ArabaFiyat ~ KrediFaizi + UretimAdet + trnd, data = transformed_diff,
weights = weights)
Weighted Residuals:
Min 1Q Median 3Q Max
-0.21737 -0.10038 -0.04458 0.09490 0.30968
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 6.910e-04 1.244e-03 0.556 0.579
KrediFaizi 1.541e-01 1.305e-02 11.806 <2e-16 ***
UretimAdet 3.047e-03 2.043e-03 1.491 0.138
trnd 1.500e-04 1.538e-05 9.755 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.12 on 161 degrees of freedom
Multiple R-squared: 0.6254, Adjusted R-squared: 0.6184
F-statistic: 89.61 on 3 and 161 DF, p-value: < 2.2e-16
plot(residuals(l_fit_log_diff))

acf(residuals(l_fit_log_diff))

pacf(residuals(l_fit_log_diff))

tmp=copy(transformed_diff)
tmp[,actual:=ArabaFiyat]
tmp[,predicted_trend:=predict(l_fit_log_diff_wls,tmp)]
tmp[,residual_trend:=actual-predicted_trend]
#head(tmp)
ggplot(tmp ,aes(x=trnd)) +
geom_line(aes(y=actual,color='real')) +
geom_line(aes(y=predicted_trend,color='predicted'))

data_path="/Users/ahmetceliker/Desktop/IE 360 HW1/m1paraarzıı.xlsx"
data=read.xlsx(data_path)
str(data)
'data.frame': 419 obs. of 4 variables:
$ Tarih : chr "01-01-2016" "08-01-2016" "15-01-2016" "22-01-2016" ...
$ ParaArzı : num 3.12e+08 3.03e+08 3.11e+08 3.09e+08 3.08e+08 ...
$ KrediKartıHarcama: num 11565090 9940209 10219710 10269749 11019633 ...
$ ElektrikTüketim : num 648689 759394 755906 778675 799747 ...
convert_to_ymd <- function(date_string) {
formatted_date <- as.Date(date_string, format = "%d-%m-%Y")
return(formatted_date)
}
data$Tarih <- convert_to_ymd(data$Tarih)
head(data)
str(data)
'data.frame': 419 obs. of 4 variables:
$ Tarih : Date, format: "2016-01-01" "2016-01-08" "2016-01-15" "2016-01-22" ...
$ ParaArzı : num 3.12e+08 3.03e+08 3.11e+08 3.09e+08 3.08e+08 ...
$ KrediKartıHarcama: num 11565090 9940209 10219710 10269749 11019633 ...
$ ElektrikTüketim : num 648689 759394 755906 778675 799747 ...
ggplot(data, aes(x = Tarih, y = KrediKartıHarcama)) +
geom_line(color = "blue")

ggplot(data, aes(x = Tarih, y = ParaArzı)) +
geom_line(color = "blue")

ggplot(data, aes(x = Tarih, y = ElektrikTüketim)) +
geom_line(color = "blue")

data2 <- subset(data, select = -Tarih)
correl_info=cor(data2)
ggcorrplot(correl_info,
hc.order = TRUE,
type = "lower",
lab = TRUE)

ggpairs(data)

l_fit = lm(KrediKartıHarcama~.,data=data)
summary(l_fit)
Call:
lm(formula = KrediKartıHarcama ~ ., data = data)
Residuals:
Min 1Q Median 3Q Max
-34794933 -6164161 81229 7149190 70648213
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.811e+08 2.254e+07 16.912 <2e-16 ***
Tarih -2.297e+04 1.367e+03 -16.809 <2e-16 ***
ParaArzı 5.070e-02 8.718e-04 58.161 <2e-16 ***
ElektrikTüketim 1.334e+01 7.209e+00 1.851 0.0649 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 10410000 on 415 degrees of freedom
Multiple R-squared: 0.9546, Adjusted R-squared: 0.9543
F-statistic: 2911 on 3 and 415 DF, p-value: < 2.2e-16
ggplot(data, aes(x=KrediKartıHarcama,y=ParaArzı)) + geom_point()+geom_smooth(method='lm')

ggplot(data, aes(x=KrediKartıHarcama,y=ElektrikTüketim)) + geom_point()+geom_smooth(method='lm')

plot(l_fit)




checkresiduals(l_fit)
Breusch-Godfrey test for serial correlation of order up to 10
data: Residuals
LM test = 333.21, df = 10, p-value < 2.2e-16

data <- as.data.table(data)
data[, trnd := 1:.N]
data[,ay:=as.character(month(Tarih,label=T))]
data[, yil := as.character(format(Tarih, "%Y"))]
data[, log_ParaArzı := log(ParaArzı)]
data[, log_KrediKartıHarcama := log(KrediKartıHarcama)]
head(data)
l_fit_log <- lm(log_KrediKartıHarcama ~ log_ParaArzı + ElektrikTüketim , data=data)
summary(l_fit_log)
Call:
lm(formula = log_KrediKartıHarcama ~ log_ParaArzı + ElektrikTüketim,
data = data)
Residuals:
Min 1Q Median 3Q Max
-0.74307 -0.15833 0.06416 0.14106 0.68868
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -2.583e+00 2.974e-01 -8.687 <2e-16 ***
log_ParaArzı 9.430e-01 1.669e-02 56.515 <2e-16 ***
ElektrikTüketim 2.543e-07 1.689e-07 1.505 0.133
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.2486 on 416 degrees of freedom
Multiple R-squared: 0.9153, Adjusted R-squared: 0.9149
F-statistic: 2247 on 2 and 416 DF, p-value: < 2.2e-16
ggplot(data, aes(x=log_ParaArzı,y=log_KrediKartıHarcama)) +
geom_point() +
geom_smooth(method='lm')

plot(l_fit_log)



NA

checkresiduals(l_fit_log)
Breusch-Godfrey test for serial correlation of order up to 10
data: Residuals
LM test = 363.94, df = 10, p-value < 2.2e-16

data$Trend_3_Aylik <- rollmean(data$KrediKartıHarcama, 3, fill = NA)
data$Trend_6_Aylik <- rollmean(data$KrediKartıHarcama, 6, fill = NA)
l_fit_trend <- lm(log_KrediKartıHarcama ~ ElektrikTüketim+log_ParaArzı+ Trend_3_Aylik + Trend_6_Aylik, data=data)
summary(l_fit_trend)
Call:
lm(formula = log_KrediKartıHarcama ~ ElektrikTüketim + log_ParaArzı +
Trend_3_Aylik + Trend_6_Aylik, data = data)
Residuals:
Min 1Q Median 3Q Max
-0.43163 -0.06424 0.01930 0.08083 0.27118
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 5.328e+00 2.682e-01 19.863 < 2e-16 ***
ElektrikTüketim 5.565e-07 8.526e-08 6.527 1.99e-10 ***
log_ParaArzı 5.308e-01 1.432e-02 37.064 < 2e-16 ***
Trend_3_Aylik 1.295e-08 3.572e-09 3.626 0.000324 ***
Trend_6_Aylik -4.497e-09 3.542e-09 -1.270 0.204870
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.1229 on 409 degrees of freedom
(5 observations deleted due to missingness)
Multiple R-squared: 0.9786, Adjusted R-squared: 0.9784
F-statistic: 4670 on 4 and 409 DF, p-value: < 2.2e-16
checkresiduals(l_fit_trend)
Breusch-Godfrey test for serial correlation of order up to 10
data: Residuals
LM test = 246.77, df = 10, p-value < 2.2e-16

ggplot(data, aes(x=Tarih , y = log_KrediKartıHarcama)) +
geom_line(color = "blue")

ggplot(data, aes(x=Tarih , y = log_ParaArzı)) +
geom_line(color = "blue")

l_fit_trend_cathegorical <- lm(log_KrediKartıHarcama ~ ElektrikTüketim+log_ParaArzı+ Trend_3_Aylik + Trend_6_Aylik+ay+yil, data=data)
summary(l_fit_trend_cathegorical)
Call:
lm(formula = log_KrediKartıHarcama ~ ElektrikTüketim + log_ParaArzı +
Trend_3_Aylik + Trend_6_Aylik + ay + yil, data = data)
Residuals:
Min 1Q Median 3Q Max
-0.312210 -0.042478 0.005646 0.055580 0.273512
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 9.799e+00 1.402e+00 6.990 1.19e-11 ***
ElektrikTüketim 9.624e-07 1.026e-07 9.380 < 2e-16 ***
log_ParaArzı 2.888e-01 7.149e-02 4.040 6.44e-05 ***
Trend_3_Aylik 1.109e-08 2.644e-09 4.195 3.38e-05 ***
Trend_6_Aylik -5.027e-09 2.633e-09 -1.909 0.056993 .
ayAug -6.738e-02 2.984e-02 -2.258 0.024490 *
ayDec 4.859e-02 2.805e-02 1.732 0.084083 .
ayFeb -5.095e-02 2.351e-02 -2.167 0.030809 *
ayJan -1.122e-01 2.391e-02 -4.695 3.70e-06 ***
ayJul -3.376e-02 2.684e-02 -1.258 0.209142
ayJun 5.069e-02 2.226e-02 2.277 0.023334 *
ayMar 1.420e-03 2.168e-02 0.066 0.947808
ayMay 2.919e-02 2.167e-02 1.347 0.178677
ayNov 8.862e-02 2.535e-02 3.495 0.000528 ***
ayOct 9.026e-02 2.460e-02 3.669 0.000278 ***
aySep 1.744e-02 2.567e-02 0.679 0.497252
yil2017 2.652e-02 2.373e-02 1.118 0.264446
yil2018 1.115e-01 3.361e-02 3.317 0.000995 ***
yil2019 1.626e-01 4.548e-02 3.575 0.000394 ***
yil2020 1.011e-01 8.294e-02 1.219 0.223579
yil2021 3.117e-01 1.042e-01 2.991 0.002956 **
yil2022 6.817e-01 1.436e-01 4.746 2.91e-06 ***
yil2023 8.533e-01 1.720e-01 4.962 1.04e-06 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.08891 on 391 degrees of freedom
(5 observations deleted due to missingness)
Multiple R-squared: 0.9893, Adjusted R-squared: 0.9887
F-statistic: 1641 on 22 and 391 DF, p-value: < 2.2e-16
checkresiduals(l_fit_trend_cathegorical)
Breusch-Godfrey test for serial correlation of order up to 26
data: Residuals
LM test = 142.65, df = 26, p-value < 2.2e-16

data$KrediKartıHarcama_4_Aylik_Gecikmeli <- lag(data$KrediKartıHarcama, 4)
data$KrediKartıHarcama_6_Aylik_Gecikmeli <- lag(data$KrediKartıHarcama, 6)
head(data)
l_fit_gecikmeli <- lm(log_KrediKartıHarcama ~ ElektrikTüketim + log_ParaArzı + KrediKartıHarcama_6_Aylik_Gecikmeli+Trend_3_Aylik +ay+yil, data=data)
summary(l_fit_gecikmeli)
Call:
lm(formula = log_KrediKartıHarcama ~ ElektrikTüketim + log_ParaArzı +
KrediKartıHarcama_6_Aylik_Gecikmeli + Trend_3_Aylik + ay +
yil, data = data)
Residuals:
Min 1Q Median 3Q Max
-0.310788 -0.041623 0.003025 0.056779 0.278610
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 9.854e+00 1.425e+00 6.916 1.92e-11 ***
ElektrikTüketim 9.693e-07 1.020e-07 9.503 < 2e-16 ***
log_ParaArzı 2.858e-01 7.267e-02 3.933 9.92e-05 ***
KrediKartıHarcama_6_Aylik_Gecikmeli -2.215e-09 9.807e-10 -2.258 0.024477 *
Trend_3_Aylik 7.968e-09 9.763e-10 8.162 4.63e-15 ***
ayAug -6.799e-02 2.994e-02 -2.271 0.023719 *
ayDec 4.432e-02 2.815e-02 1.574 0.116219
ayFeb -5.322e-02 2.385e-02 -2.232 0.026207 *
ayJan -1.122e-01 2.497e-02 -4.492 9.33e-06 ***
ayJul -3.575e-02 2.690e-02 -1.329 0.184662
ayJun 4.642e-02 2.247e-02 2.066 0.039475 *
ayMar -1.733e-03 2.185e-02 -0.079 0.936810
ayMay 2.695e-02 2.179e-02 1.236 0.217026
ayNov 9.404e-02 2.565e-02 3.666 0.000280 ***
ayOct 9.805e-02 2.502e-02 3.919 0.000105 ***
aySep 2.443e-02 2.607e-02 0.937 0.349197
yil2017 2.911e-02 2.474e-02 1.177 0.240051
yil2018 1.154e-01 3.490e-02 3.306 0.001036 **
yil2019 1.673e-01 4.702e-02 3.558 0.000420 ***
yil2020 1.080e-01 8.517e-02 1.268 0.205431
yil2021 3.180e-01 1.069e-01 2.974 0.003119 **
yil2022 6.908e-01 1.473e-01 4.690 3.78e-06 ***
yil2023 8.675e-01 1.764e-01 4.918 1.29e-06 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.08939 on 389 degrees of freedom
(7 observations deleted due to missingness)
Multiple R-squared: 0.9894, Adjusted R-squared: 0.9888
F-statistic: 1655 on 22 and 389 DF, p-value: < 2.2e-16
checkresiduals(l_fit_gecikmeli)
Breusch-Godfrey test for serial correlation of order up to 26
data: Residuals
LM test = 142.45, df = 26, p-value < 2.2e-16

l_fit_gecikmeli <- lm(log_KrediKartıHarcama ~ log(ElektrikTüketim) + log_ParaArzı + KrediKartıHarcama_6_Aylik_Gecikmeli + Trend_3_Aylik + ay + yil, data=data)
summary(l_fit_gecikmeli)
Call:
lm(formula = log_KrediKartıHarcama ~ log(ElektrikTüketim) +
log_ParaArzı + KrediKartıHarcama_6_Aylik_Gecikmeli + Trend_3_Aylik +
ay + yil, data = data)
Residuals:
Min 1Q Median 3Q Max
-0.307028 -0.041555 0.001714 0.053973 0.279008
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -1.015e+00 1.827e+00 -0.556 0.578819
log(ElektrikTüketim) 8.483e-01 8.205e-02 10.338 < 2e-16 ***
log_ParaArzı 2.923e-01 7.147e-02 4.090 5.24e-05 ***
KrediKartıHarcama_6_Aylik_Gecikmeli -2.189e-09 9.635e-10 -2.272 0.023634 *
Trend_3_Aylik 7.989e-09 9.583e-10 8.337 1.33e-15 ***
ayAug -7.113e-02 2.895e-02 -2.457 0.014433 *
ayDec 3.436e-02 2.781e-02 1.236 0.217343
ayFeb -5.841e-02 2.348e-02 -2.488 0.013263 *
ayJan -1.175e-01 2.458e-02 -4.782 2.47e-06 ***
ayJul -4.082e-02 2.622e-02 -1.557 0.120256
ayJun 4.298e-02 2.211e-02 1.944 0.052597 .
ayMar -5.162e-03 2.150e-02 -0.240 0.810365
ayMay 2.860e-02 2.143e-02 1.335 0.182814
ayNov 8.765e-02 2.527e-02 3.468 0.000583 ***
ayOct 9.335e-02 2.462e-02 3.791 0.000174 ***
aySep 1.909e-02 2.560e-02 0.746 0.456169
yil2017 2.102e-02 2.442e-02 0.861 0.389999
yil2018 1.041e-01 3.445e-02 3.022 0.002679 **
yil2019 1.544e-01 4.636e-02 3.331 0.000948 ***
yil2020 9.420e-02 8.382e-02 1.124 0.261756
yil2021 2.982e-01 1.052e-01 2.834 0.004840 **
yil2022 6.655e-01 1.450e-01 4.590 5.98e-06 ***
yil2023 8.367e-01 1.736e-01 4.820 2.06e-06 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.08788 on 389 degrees of freedom
(7 observations deleted due to missingness)
Multiple R-squared: 0.9898, Adjusted R-squared: 0.9892
F-statistic: 1713 on 22 and 389 DF, p-value: < 2.2e-16
checkresiduals(l_fit_gecikmeli)
Breusch-Godfrey test for serial correlation of order up to 26
data: Residuals
LM test = 142.99, df = 26, p-value < 2.2e-16

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3J9CnJlcXVpcmUob3Blbnhsc3gpCnJlcXVpcmUoZ2dwbG90MikKcmVxdWlyZShkYXRhLnRhYmxlKQpyZXF1aXJlKHNraW1yKQpyZXF1aXJlKEdHYWxseSkKcmVxdWlyZShnZ2NvcnJwbG90KQpyZXF1aXJlKGZvcmVjYXN0KQpyZXF1aXJlKGx1YnJpZGF0ZSkKcmVxdWlyZShyZXByKQpyZXF1aXJlKGxtdGVzdCkKb3B0aW9ucyhyZXByLnBsb3Qud2lkdGg9MTIuNywgcmVwci5wbG90LmhlaWdodD04LjUpCmRhdGFfcGF0aCA9ICcvVXNlcnMvYWhtZXRjZWxpa2VyL0Rlc2t0b3AvSUUgMzYwIEhXMS90b3BsYW1rcmVkaWhhY21pLnhsc3gnCmtyZWRpPXJlYWQueGxzeChkYXRhX3BhdGgsc2hlZXQ9J2RhdGEnKQpzdHIoa3JlZGkpCgpgYGAKCgpgYGB7cn0Kc3VtbWFyeV9kYXRhPXNraW0oa3JlZGkpCnByaW50KHN1bW1hcnlfZGF0YSkKYGBgCgoKCmBgYHtyfQprcmVkaT1kYXRhLnRhYmxlKGtyZWRpKQpzdHIoa3JlZGkpCgpjb3JyZWxfaW5mbz1jb3Ioa3JlZGkpCgpnZ2NvcnJwbG90KGNvcnJlbF9pbmZvLCAKICAgICAgICAgICBoYy5vcmRlciA9IFRSVUUsIAogICAgICAgICAgIHR5cGUgPSAibG93ZXIiLAogICAgICAgICAgIGxhYiA9IFRSVUUpCmBgYApgYGB7cn0KZ2dwbG90KGtyZWRpLCBhZXMoeD1NZXZkdWF0RmFpek9yYW5pLHk9S3JlZGlIYWNtaSkpICsgZ2VvbV9wb2ludCgpCmBgYAoKCmBgYHtyfQpsX2ZpdCA9IGxtKEtyZWRpSGFjbWl+LixkYXRhPWtyZWRpKQpsX2ZpdApgYGAKCgpgYGB7cn0Kc3VtbWFyeShsX2ZpdCkKYGBgCgpgYGB7cn0KcGxvdChsX2ZpdCkKCmBgYAoKYGBge3J9CmdncGxvdChrcmVkaSwgYWVzKHg9TWV2ZHVhdEZhaXpPcmFuaSx5PUtyZWRpSGFjbWkpKSArIGdlb21fcG9pbnQoKSArZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScpCmBgYApgYGB7cn0KZ2dwbG90KGtyZWRpLCBhZXMoeD1NZXZkdWF0RmFpek9yYW5pLHk9S3JlZGlIYWNtaSkpICsgZ2VvbV9wb2ludCgpK2dlb21fc21vb3RoKG1ldGhvZD0nbG9lc3MnKQpgYGAKCgpgYGB7cn0Kc3VtbWFyeShsX2ZpdCkKYGBgCgpgYGB7cn0Ka3JlZGlbLCB0cm5kIDo9IDE6Lk5dCmhlYWQoa3JlZGkpCmBgYAoKYGBge3J9CmxtX3RyZW5kPWxtKEtyZWRpSGFjbWl+dHJuZCxrcmVkaSkKc3VtbWFyeShsbV90cmVuZCkKYGBgCgpgYGB7cn0KIyBOZXcgTW9kZWwgd2l0aCBUcmVuZApsX2ZpdF90cmVuZCA8LSBsbShLcmVkaUhhY21pIH4gTWV2ZHVhdEZhaXpPcmFuaSArIHRybmQsIGRhdGEgPSBrcmVkaSkKCiMgU3VtbWFyeSBvZiBOZXcgTW9kZWwgd2l0aCBUcmVuZApzdW1tYXJ5KGxfZml0X3RyZW5kKQpgYGAKYGBge3J9CmJwdGVzdChsX2ZpdF90cmVuZCkKZ2dwbG90KGtyZWRpLCBhZXMoeCA9IE1ldmR1YXRGYWl6T3JhbmksIHkgPSBLcmVkaUhhY21pKSkgKwogIGdlb21fcG9pbnQoKSArCiAgZ2VvbV9zbW9vdGgoCiAgICBhZXMoeSA9IHByZWRpY3QobF9maXRfdHJlbmQsIG5ld2RhdGEgPSBkYXRhLmZyYW1lKE1ldmR1YXRGYWl6T3JhbmkgPSBrcmVkaSRNZXZkdWF0RmFpek9yYW5pLCB0cm5kID0ga3JlZGkkdHJuZCkpKSwKICAgIG1ldGhvZCA9ICdsbScsCiAgICBjb2xvciA9ICdibHVlJywKICAgIGxpbmV0eXBlID0gJ3NvbGlkJwogICkKYGBgCgpgYGB7cn0KY2hlY2tyZXNpZHVhbHMobF9maXRfdHJlbmQkcmVzaWR1YWxzKQpgYGAKYGBge3J9CnJlcXVpcmUodHNlcmllcykKYWRmLnRlc3Qoa3JlZGkkS3JlZGlIYWNtaSkKYWRmLnRlc3QobF9maXRfdHJlbmQkcmVzaWR1YWxzKQoKYGBgCgoKCmBgYHtyfQpzdW1tYXJ5KGtyZWRpKQpzdHIoa3JlZGkpCmBgYAoKCgpgYGB7cn0KIyBEaWZmZXJlbmNpbmcgdGhlIHJlbGV2YW50IHZhcmlhYmxlcwprcmVkaV9kaWZmIDwtIGtyZWRpWywgbGFwcGx5KC5TRCwgZGlmZiksIC5TRGNvbHMgPSBjKCJLcmVkaUhhY21pIiwgIk1ldmR1YXRGYWl6T3JhbmkiKV0KIyBDaGVja2luZyB0aGUgZmlyc3QgZmV3IHJvd3Mgb2YgdGhlIGRpZmZlcmVuY2VkIGRhdGFzZXQKaGVhZChrcmVkaV9kaWZmKQoKIyBNb2RlbCB3aXRob3V0IHRyZW5kIGFuZCB3aXRoIGRpZmZlcmVuY2luZwpsX2ZpdF9kaWZmX3NpbXBsZSA8LSBsbShLcmVkaUhhY21pIH4gTWV2ZHVhdEZhaXpPcmFuaSwgZGF0YSA9IGtyZWRpX2RpZmYpCgojIFN1bW1hcnkgb2YgdGhlIG1vZGVsCnN1bW1hcnkobF9maXRfZGlmZl9zaW1wbGUpCmBgYAoKYGBge3J9CmdncGxvdChrcmVkaV9kaWZmLCBhZXMoeD1NZXZkdWF0RmFpek9yYW5pLHk9S3JlZGlIYWNtaSkpICsgZ2VvbV9wb2ludCgpICtnZW9tX3Ntb290aChtZXRob2Q9J2xtJykKCmBgYAoKCgpgYGB7cn0KIyBBcHBseWluZyBsb2cgdHJhbnNmb3JtYXRpb24gdG8gS3JlZGlIYWNtaSB2YXJpYWJsZQprcmVkaSRLcmVkaUhhY21pIDwtIGxvZyhrcmVkaSRLcmVkaUhhY21pICsgMSkgICMgQWRkaW5nIDEgdG8gYXZvaWQgbG9nKDApIGVycm9ycwoKIyBGaXQgYSBuZXcgbW9kZWwgd2l0aCB0aGUgbG9nLXRyYW5zZm9ybWVkIEtyZWRpSGFjbWkgdmFyaWFibGUKbF9maXRfbG9nIDwtIGxtKEtyZWRpSGFjbWkgfiBNZXZkdWF0RmFpek9yYW5pICsgdHJuZCwgZGF0YSA9IGtyZWRpKQoKIyBTdW1tYXJ5IG9mIHRoZSBuZXcgbW9kZWwgd2l0aCB0aGUgbG9nLXRyYW5zZm9ybWVkIEtyZWRpSGFjbWkgdmFyaWFibGUKc3VtbWFyeShsX2ZpdF9sb2cpCgoKYGBgCmBgYHtyfQpjaGVja3Jlc2lkdWFscyhsX2ZpdF9sb2cpCmFkZi50ZXN0KGtyZWRpJEtyZWRpSGFjbWkpCmFkZi50ZXN0KGxfZml0X2xvZyRyZXNpZHVhbHMpCmBgYAoKCgpgYGB7cn0KZ2dwbG90KGtyZWRpX2RpZmYsIGFlcyh4PU1ldmR1YXRGYWl6T3JhbmkseT1LcmVkaUhhY21pKSkgKyBnZW9tX3BvaW50KCkgK2dlb21fc21vb3RoKG1ldGhvZD0nbG0nKQpgYGAKCmBgYHtyfQp3ZWlnaHRzIDwtIDEgLyBhYnMobF9maXRfbG9nJHJlc2lkdWFscykKbF9maXRfd2xzIDwtIGxtKEtyZWRpSGFjbWkgfiBNZXZkdWF0RmFpek9yYW5pICsgdHJuZCwgZGF0YSA9IGtyZWRpLCB3ZWlnaHRzID0gd2VpZ2h0cykKc3VtbWFyeShsX2ZpdF93bHMpCmNoZWNrcmVzaWR1YWxzKGxfZml0X3dscykKa3JlZGkkd2Vla19udW1iZXIgPC0gc2VxKDEsIG5yb3coa3JlZGkpKQpoZWFkKGtyZWRpLDUwKQpgYGAKCgoKYGBge3J9CnBsb3QobG9nMTAoYWJzKGZmdF9rcmVkaSkpLCBtYWluID0gIktyZWRpIEhhY21pIERGVCAoTG9nYXJpdG1paykiLCB4bGFiID0gIkZyZWthbnMiLCB5bGFiID0gIkdlbmxpayIpCgoKYGBgCgoKYGBge3J9CnBsb3QobF9maXRfd2xzKQpgYGAKCgoKYGBge3J9CmFjZihsX2ZpdF93bHMkcmVzaWR1YWxzLDIwMCkKbWVhbihsX2ZpdF93bHMkcmVzaWR1YWxzKQpjb3IobF9maXRfd2xzJHJlc2lkdWFscywga3JlZGkkTWV2ZHVhdEZhaXpPcmFuaSkKY29yKGxfZml0X3dscyRyZXNpZHVhbHMsIGtyZWRpJHRybmQpCmBgYAoKYGBge3J9CiN0byBmaW5kIHNlYXNvbmFsaXR5IGluZGV4CmdncGxvdChrcmVkaVt3ZWVrX251bWJlcj4xICYgd2Vla19udW1iZXI8MzAwXSAsYWVzKHg9d2Vla19udW1iZXIpKSArCiAgICAgICAgZ2VvbV9saW5lKGFlcyh5PUtyZWRpSGFjbWksY29sb3I9J3JlYWwnKSkKYGBgCgoKYGBge3J9CgpkYXRhX3RvX3Bsb3QgPC0ga3JlZGkKeV9sYWJlbCA8LSAiS3JlZGkgSGFjbWkiCmdncGxvdChkYXRhX3RvX3Bsb3QsIGFlcyh4ID0gdHJuZCwgeSA9IEtyZWRpSGFjbWkpKSArCiAgZ2VvbV9wb2ludChzaXplID0gMykgKyAgIyBBZGp1c3QgcG9pbnQgc2l6ZSBhcyBkZXNpcmVkCiAgbGFicyh0aXRsZSA9ICJUcmVuZCB2cy4gS3JlZGkgSGFjbWkiLAogICAgICAgeCA9ICJUcmVuZCIsCiAgICAgICB5ID0geV9sYWJlbCkKICAKYGBgCgpgYGB7cn0KI21vbnRobHkgc2Vhc29uYWxpdHkgd2l0aCBsYWcgb2YgMjApIGZvdXJpZXIgc2VyaXMKCmtyZWRpJHNlYXNvbmFsaXR5X3NpbiA8LSBzaW4oMipwaSAqICgoa3JlZGkkd2Vla19udW1iZXIgLSAxKSAlJSAyMCkgLyAyMCkgICMgSGVyIDIwIGhhZnRhZGEgYmlyIHNpbsO8cyBtZXZzaW1zZWxsaWsKa3JlZGkkc2Vhc29uYWxpdHlfY29zIDwtIGNvcygyKnBpICogKChrcmVkaSR3ZWVrX251bWJlciAtIDEpICUlIDIwKSAvIDIwKSAgIyBIZXIgMjAgaGFmdGFkYSBiaXIga29zaW7DvHMgbWV2c2ltc2VsbGlrCgpsX2ZpdF93bHNfZm91cmllciA8LSBsbShLcmVkaUhhY21pIH4gTWV2ZHVhdEZhaXpPcmFuaSArIHRybmQgKyBzZWFzb25hbGl0eV9zaW4gKyBzZWFzb25hbGl0eV9jb3MsIGRhdGEgPSBrcmVkaSwgd2VpZ2h0cyA9IHdlaWdodHMpCnN1bW1hcnkobF9maXRfd2xzX2ZvdXJpZXIpCmNoZWNrcmVzaWR1YWxzKGxfZml0X3dsc19mb3VyaWVyKQpnZ3Bsb3Qoa3JlZGksIGFlcyh4ID0gTWV2ZHVhdEZhaXpPcmFuaSwgeSA9IEtyZWRpSGFjbWkpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNSkgKyAgIyBBZGp1c3QgYWxwaGEgZm9yIHBvaW50IHRyYW5zcGFyZW5jeQogIGdlb21fc21vb3RoKAogICAgbWV0aG9kID0gJ2xtJywKICAgIGFlcyh5ID0gcHJlZGljdChsX2ZpdF93bHNfZm91cmllciwgbmV3ZGF0YSA9IGRhdGEuZnJhbWUoTWV2ZHVhdEZhaXpPcmFuaSA9IGtyZWRpJE1ldmR1YXRGYWl6T3JhbmksIHRybmQgPSBrcmVkaSR0cm5kLCBzZWFzb25hbGl0eV9zaW4gPSBrcmVkaSRzZWFzb25hbGl0eV9zaW4sIHNlYXNvbmFsaXR5X2NvcyA9IGtyZWRpJHNlYXNvbmFsaXR5X2NvcykpKSwKICAgIGNvbG9yID0gJ2JsdWUnLAogICAgbGluZXR5cGUgPSAnc29saWQnCiAgKSArCiAgbGFicyh0aXRsZSA9ICJGaXR0ZWQgTW9kZWwgd2l0aCBXTFMsIFRyZW5kLCBhbmQgRm91cmllciBGZWF0dXJlcyIsCiAgICAgICB4ID0gIk1ldmR1YXRGYWl6T3JhbmkiLAogICAgICAgeSA9ICJLcmVkaSBIYWNtaSIpCgpgYGAKYGBge3J9CiNDaGVja2luZyBhbGwgYXNzdW1waXRvbnMgb2YgbGluZWFyIHJlZ3Jlc3Npb24gbW9kZWw6CiMgQ2hlY2sgaWYgbWVhbiBvZiByZXNpZHVhbHMgaXMgY2xvc2UgdG8gemVybwptZWFuKHJlc2lkdWFscyhsX2ZpdF93bHNfZm91cmllcikpCiNDaGVjayBmb3IgYXV0b2NvcnJlbGF0aW9uIGluIHJlc2lkdWFscwphY2YocmVzaWR1YWxzKGxfZml0X3dsc19mb3VyaWVyKSkKcGFjZihyZXNpZHVhbHMobF9maXRfd2xzX2ZvdXJpZXIpKQpzdW1tYXJ5KGxfZml0X3dsc19mb3VyaWVyKQpjaGVja3Jlc2lkdWFscyhsX2ZpdF93bHNfZm91cmllcikKYGBgCgpgYGB7cn0KY2hlY2tyZXNpZHVhbHMobF9maXRfd2xzX2ZvdXJpZXIpCmBgYAoKYGBge3J9CiMgSW5jbHVkZSBsYWdzIG9mIHJlc2lkdWFscyBhcyBwcmVkaWN0b3JzIChhZGp1c3QgbGFncyBhcyBuZWVkZWQpCmxfZml0X3dsc19mb3VyaWVyX2FyIDwtIGxtKEtyZWRpSGFjbWkgfiBNZXZkdWF0RmFpek9yYW5pICsgdHJuZCArIHNlYXNvbmFsaXR5X3NpbiArIHNlYXNvbmFsaXR5X2NvcyArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNpZHVhbHMobF9maXRfd2xzX2ZvdXJpZXIpICsgc3RhdHM6OmxhZyhyZXNpZHVhbHMobF9maXRfd2xzX2ZvdXJpZXIpLCAyKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBrcmVkaSwgd2VpZ2h0cyA9IHdlaWdodHMpCgojIENoZWNrIGF1dG9jb3JyZWxhdGlvbiBpbiByZXNpZHVhbHMgb2YgdGhlIG5ldyBtb2RlbCAobF9maXRfd2xzX2ZvdXJpZXJfYXIpCmFjZihyZXNpZHVhbHMobF9maXRfd2xzX2ZvdXJpZXJfYXIpKQpwYWNmKHJlc2lkdWFscyhsX2ZpdF93bHNfZm91cmllcl9hcikpCgpgYGAKCmBgYHtyfQpkYXRhX3BhdGg9Ii9Vc2Vycy9haG1ldGNlbGlrZXIvRGVza3RvcC9JRSAzNjAgSFcxL2FyYWJhdcyIcmV0aW1pLnhsc3giCgphcmFiYWZpeWF0PXJlYWQueGxzeChkYXRhX3BhdGgpCmFyYWJhZml5YXQkVGFyaWggPC0geW0oYXJhYmFmaXlhdCRUYXJpaCkKc3RyKGFyYWJhZml5YXQpCgpgYGAKCmBgYHtyfQpzdW1tYXJ5X2RhdGE9c2tpbShhcmFiYWZpeWF0KQpwcmludChhcmFiYWZpeWF0KQpgYGAKCmBgYHtyfQphcmFiYWZpeWF0MiA8LSBhcmFiYWZpeWF0WywgLXdoaWNoKG5hbWVzKGFyYWJhZml5YXQpID09ICJUYXJpaCIpXQoKIyBDaGVjayB0aGUgc3RydWN0dXJlIG9mIHRoZSBuZXcgZGF0YSBmcmFtZQpzdHIoYXJhYmFmaXlhdDIpCmBgYApgYGB7cn0KCmNvcnJlbF9pbmZvPWNvcihhcmFiYWZpeWF0MikKCmdnY29ycnBsb3QoY29ycmVsX2luZm8sIAogICAgICAgICAgIGhjLm9yZGVyID0gVFJVRSwgCiAgICAgICAgICAgdHlwZSA9ICJsb3dlciIsCiAgICAgICAgICAgbGFiID0gVFJVRSkKYGBgCgoKYGBge3J9CmdncGxvdChhcmFiYWZpeWF0MiwgYWVzKHg9S3JlZGlGYWl6aSx5PUFyYWJhRml5YXQpKSArIGdlb21fcG9pbnQoKQpgYGAKYGBge3J9CmdncGFpcnMoYXJhYmFmaXlhdDIpCmBgYAoKCgpgYGB7cn0KbF9maXQgPSBsbShBcmFiYUZpeWF0fi4sZGF0YT1hcmFiYWZpeWF0MikKbF9maXQKCnN1bW1hcnkobF9maXQpCgpgYGAKCgpgYGB7cn0KcGxvdChsX2ZpdCkKYGBgCgpgYGB7cn0KZ2dwbG90KGFyYWJhZml5YXQyLCBhZXMoeD1LcmVkaUZhaXppLHk9QXJhYmFGaXlhdCkpICsgZ2VvbV9wb2ludCgpKyBnZW9tX3Ntb290aChtZXRob2Q9J2xtJykKCmdncGxvdChhcmFiYWZpeWF0MiwgYWVzKHg9S3JlZGlGYWl6aSx5PUFyYWJhRml5YXQpKSArIGdlb21fcG9pbnQoKSsgZ2VvbV9zbW9vdGgobWV0aG9kPSdsb2VzcycpCmBgYAoKYGBge3J9CmdncGxvdChhcmFiYWZpeWF0MiwgYWVzKHg9VXJldGltQWRldCx5PUFyYWJhRml5YXQpKSArIGdlb21fcG9pbnQoKSsgZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScpCgpnZ3Bsb3QoYXJhYmFmaXlhdDIsIGFlcyh4PVVyZXRpbUFkZXQseT1BcmFiYUZpeWF0KSkgKyBnZW9tX3BvaW50KCkrIGdlb21fc21vb3RoKG1ldGhvZD0nbG9lc3MnKQpgYGAKCmBgYHtyfQpnZ3Bsb3QoYXJhYmFmaXlhdCwgYWVzKHggPSBUYXJpaCwgeSA9IEFyYWJhRml5YXQpKSArCiAgZ2VvbV9saW5lKGNvbG9yID0gImJsdWUiKSArCiAgbGFicyh0aXRsZSA9ICJBcmFiYSBTYXTEscWfIEZpeWF0xLEiLCB4ID0gIlRhcmloIiwgeSA9ICJTYXTEscWfIEZpeWF0xLEiKQpgYGAKCgpgYGB7cn0KCmFyYWJhZml5YXQkQXJhYmFGaXlhdCA8LSBsb2coYXJhYmFmaXlhdCRBcmFiYUZpeWF0ICsgMSkKc3VtbWFyeShhcmFiYWZpeWF0KQoKCmxfZml0X2xvZyA8LSBsbShBcmFiYUZpeWF0fi4sIGRhdGE9YXJhYmFmaXlhdCkKCgpzdW1tYXJ5KGxfZml0X2xvZykKCgpgYGAKCmBgYHtyfQpnZ3Bsb3QoYXJhYmFmaXlhdCwgYWVzKHggPSBUYXJpaCwgeSA9IEFyYWJhRml5YXQpKSArCiAgZ2VvbV9saW5lKGNvbG9yID0gImJsdWUiKSArCiAgbGFicyh0aXRsZSA9ICJBcmFiYSBTYXTEscWfIEZpeWF0xLEgTG9nIFRyYW5zZm9ybWVkIiwgeCA9ICJUYXJpaCIsIHkgPSAiU2F0xLHFnyBGaXlhdMSxIExvZyIpCmBgYAoKYGBge3J9CmdncGxvdChhcmFiYWZpeWF0LCBhZXMoeCA9IFRhcmloLCB5ID0gS3JlZGlGYWl6aSkpICsKICBnZW9tX2xpbmUoY29sb3IgPSAiYmx1ZSIpICsKICBsYWJzKHRpdGxlID0gIkFyYWJhIEtyZWRpIEZhaXppIiwgeCA9ICJUYXJpaCIsIHkgPSAiS3JlZGlGYWl6aSIpCmBgYAoKYGBge3J9Cgpsb2d0cmFuc2Zvcm1lZCA9IGNvcHkoYXJhYmFmaXlhdCkKbG9ndHJhbnNmb3JtZWQkS3JlZGlGYWl6aSA8LSBsb2cobG9ndHJhbnNmb3JtZWQkS3JlZGlGYWl6aSArIDEpCnN1bW1hcnkobG9ndHJhbnNmb3JtZWQpCmhlYWQobG9ndHJhbnNmb3JtZWQpCgpsX2ZpdF9sb2cgPC0gbG0oQXJhYmFGaXlhdH4uLCBkYXRhPWxvZ3RyYW5zZm9ybWVkKQoKCnN1bW1hcnkobF9maXRfbG9nKQpgYGAKYGBge3J9CmdncGxvdChsb2d0cmFuc2Zvcm1lZCwgYWVzKHggPSBUYXJpaCwgeSA9IEtyZWRpRmFpemkpKSArCiAgZ2VvbV9saW5lKGNvbG9yID0gImJsdWUiKSArCiAgbGFicyh0aXRsZSA9ICJLcmVkaSBGYWl6aSBMb2cgVHJhbnNmb3JtZWQiLCB4ID0gIlRhcmloIiwgeSA9ICJTYXTEscWfIEZpeWF0xLEiKQpgYGAKYGBge3J9CiJBZnRlciBhcHBseWluZyB0aGUgbG9nYXJpdGhtaWMgdHJhbnNmb3JtYXRpb24sIHRoZXJlIHdhc24ndCBhIHNpZ25pZmljYW50IGNoYW5nZSwgc28gdGhlcmUncyBubyBuZWVkIHRvIHRha2UgdGhlIGxvZ2FyaXRobSBvZiB0aGUgY3JlZGl0IGludGVyZXN0IHJhdGUgZGF0YS4iCmBgYAoKYGBge3J9CmdncGxvdChhcmFiYWZpeWF0LCBhZXMoeCA9IFRhcmloLCB5ID0gVXJldGltQWRldCkpICsKICBnZW9tX2xpbmUoY29sb3IgPSAiYmx1ZSIpICsKICBsYWJzKHRpdGxlID0gIkFyYWJhIFVyZXRpbSBBZGVkaSIsIHggPSAiVGFyaWgiLCB5ID0gIlVyZXRpbSIpCmBgYAoKYGBge3J9CmxvZ3RyYW5zZm9ybWVkJFVyZXRpbUFkZXQgPC0gbG9nKGxvZ3RyYW5zZm9ybWVkJFVyZXRpbUFkZXQgKyAxKQpzdW1tYXJ5KGxvZ3RyYW5zZm9ybWVkKQpoZWFkKGxvZ3RyYW5zZm9ybWVkKQoKCmxfZml0X2xvZyA8LSBsbShBcmFiYUZpeWF0fi4sIGRhdGE9bG9ndHJhbnNmb3JtZWQpCgoKc3VtbWFyeShsX2ZpdF9sb2cpCmBgYAoKCmBgYHtyfQpnZ3Bsb3QobG9ndHJhbnNmb3JtZWQsIGFlcyh4ID0gVGFyaWgsIHkgPSBVcmV0aW1BZGV0KSkgKwogIGdlb21fbGluZShjb2xvciA9ICJibHVlIikgKwogIGxhYnModGl0bGUgPSAiQXJhYmEgVXJldGltIEFkZWRpIExvZyBUcmFuc2Zvcm1lZCIsIHggPSAiVGFyaWgiLCB5ID0gIlNhdMSxxZ8gRml5YXTEsSIpCmBgYAoKYGBge3J9CmxpYnJhcnkoZHBseXIpCgpsb2d0cmFuc2Zvcm1lZCA8LSBsb2d0cmFuc2Zvcm1lZCAlPiUgbXV0YXRlKHRybmQgPSByb3dfbnVtYmVyKCkpCgpzdW1tYXJ5KGxvZ3RyYW5zZm9ybWVkKQpsX3RyZW5kIDwtIGxtKEFyYWJhRml5YXR+IEtyZWRpRmFpemkgKyBVcmV0aW1BZGV0ICsgdHJuZCAsZGF0YT1sb2d0cmFuc2Zvcm1lZCkKc3VtbWFyeShsX3RyZW5kKQoKCmBgYApgYGB7cn0KY2hlY2tyZXNpZHVhbHMobF90cmVuZCRyZXNpZHVhbHMpCmBgYApgYGB7cn0KbGlicmFyeSh0c2VyaWVzKQprcHNzX3Rlc3RfcmVzdWx0IDwtIGFkZi50ZXN0KHJlc2lkdWFscyhsX3RyZW5kKSwgYWx0ZXJuYXRpdmUgPSAic3RhdGlvbmFyeSIpCmtwc3NfdGVzdF9yZXN1bHQKCmBgYApgYGB7cn0KcGxvdChyZXNpZHVhbHMobF90cmVuZCkpCmFjZihyZXNpZHVhbHMobF90cmVuZCkpCnBhY2YocmVzaWR1YWxzKGxfdHJlbmQpKQoKYGBgCmBgYHtyfQpwbG90KGxfdHJlbmQpCmBgYApgYGB7cn0KbG9ndHJhbnNmb3JtZWQgPC0gYXMuZGF0YS50YWJsZShsb2d0cmFuc2Zvcm1lZCkKaGVhZChsb2d0cmFuc2Zvcm1lZCkKIyBEaWZmZXJlbmNpbmcgdGhlIHJlbGV2YW50IHZhcmlhYmxlcwpsb2d0cmFuc2Zvcm1lZGRpZmYgPC0gbG9ndHJhbnNmb3JtZWRbLCBsYXBwbHkoLlNELCBkaWZmKSwgLlNEY29scyA9IGMoIktyZWRpRmFpemkiLCAiQXJhYmFGaXlhdCIsICJVcmV0aW1BZGV0IildCiMgQ2hlY2tpbmcgdGhlIGZpcnN0IGZldyByb3dzIG9mIHRoZSBkaWZmZXJlbmNlZCBkYXRhc2V0CmhlYWQobG9ndHJhbnNmb3JtZWRkaWZmKQpsb2d0cmFuc2Zvcm1lZGRpZmZbLCB0cm5kIDo9IDE6Lk5dCgojIE1vZGVsIHdpdGhvdXQgdHJlbmQgYW5kIHdpdGggZGlmZmVyZW5jaW5nCmxfZml0X2xvZ19kaWZmPC0gbG0oQXJhYmFGaXlhdCB+IEtyZWRpRmFpemkgKyBVcmV0aW1BZGV0K3RybmQsIGRhdGEgPSBsb2d0cmFuc2Zvcm1lZGRpZmYpCgojIFN1bW1hcnkgb2YgdGhlIG1vZGVsCnN1bW1hcnkobF9maXRfbG9nX2RpZmYpCmBgYAoKCmBgYHtyfQpyZXF1aXJlKHRzZXJpZXMpCmFkZi50ZXN0KGxvZ3RyYW5zZm9ybWVkZGlmZiRBcmFiYUZpeWF0KQphZGYudGVzdChsX2ZpdF9sb2dfZGlmZiRyZXNpZHVhbHMpCiJ0ZXN0IHJlc3VsdHMgZ2l2ZSBib3RoIGFyYWJhIGZpeWF0IGFuZCByZXNpZHVhbHMgb2YgdGhlIG1vZGVsIGFyZSBzdGF0aW9uYXJ5IgpgYGAKCmBgYHtyfQpnZ3Bsb3QobG9ndHJhbnNmb3JtZWRkaWZmLCBhZXMoeD1VcmV0aW1BZGV0LHk9QXJhYmFGaXlhdCkpICsgZ2VvbV9wb2ludCgpKyBnZW9tX3Ntb290aChtZXRob2Q9J2xtJykKCmdncGxvdChsb2d0cmFuc2Zvcm1lZGRpZmYsIGFlcyh4PVVyZXRpbUFkZXQseT1BcmFiYUZpeWF0KSkgKyBnZW9tX3BvaW50KCkrIGdlb21fc21vb3RoKG1ldGhvZD0nbG9lc3MnKQpgYGAKYGBge3J9CmdncGxvdChsb2d0cmFuc2Zvcm1lZGRpZmYsIGFlcyh4PUtyZWRpRmFpemkseT1BcmFiYUZpeWF0KSkgKyBnZW9tX3BvaW50KCkrIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nKQoKZ2dwbG90KGxvZ3RyYW5zZm9ybWVkZGlmZiwgYWVzKHg9S3JlZGlGYWl6aSx5PUFyYWJhRml5YXQpKSArIGdlb21fcG9pbnQoKSsgZ2VvbV9zbW9vdGgobWV0aG9kPSdsb2VzcycpCmBgYApgYGB7cn0KcGxvdChsX2ZpdF9sb2dfZGlmZikKYGBgCgpgYGB7cn0KbF9kaWZmX2xvZ193aXRob3V0dHJlbmQgPC0gbG0oQXJhYmFGaXlhdCB+IEtyZWRpRmFpemkgKyBVcmV0aW1BZGV0ICwgZGF0YSA9IGxvZ3RyYW5zZm9ybWVkZGlmZikKc3VtbWFyeShsX2RpZmZfbG9nX3dpdGhvdXR0cmVuZCkKYGBgCmBgYHtyfQpnZ3Bsb3QobG9ndHJhbnNmb3JtZWRkaWZmLCBhZXMoeCA9IHRybmQsIHkgPSBBcmFiYUZpeWF0KSkgKwogIGdlb21fbGluZShjb2xvciA9ICJibHVlIikgKwogIGxhYnMoeCA9ICJUYXJpaCIsIHkgPSAiU2F0xLHFnyBGaXlhdMSxIikKYGBgCmBgYHtyfQp0cmFuc2Zvcm1lZF9kaWZmPWNvcHkobG9ndHJhbnNmb3JtZWRkaWZmWy1jKDExNCwxNDMsMTA2KV0pCmdncGxvdCh0cmFuc2Zvcm1lZF9kaWZmLCBhZXMoeCA9IHRybmQsIHkgPSBBcmFiYUZpeWF0KSkgKwogIGdlb21fbGluZShjb2xvciA9ICJibHVlIikgKwogIGxhYnMoeCA9ICJUYXJpaCIsIHkgPSAiU2F0xLHFnyBGaXlhdMSxIikKCmBgYApgYGB7cn0KZ2dwbG90KGxvZ3RyYW5zZm9ybWVkZGlmZiwgYWVzKHggPSBLcmVkaUZhaXppLCB5ID0gQXJhYmFGaXlhdCkpICsKICBnZW9tX2xpbmUoY29sb3IgPSAiYmx1ZSIpICsKICBsYWJzKHggPSAiS3JlZGkgRmFpemkiLCB5ID0gIlNhdMSxxZ8gRml5YXTEsSIpCmBgYApgYGB7cn0KZ2dwbG90KGxvZ3RyYW5zZm9ybWVkZGlmZiwgYWVzKHggPSBVcmV0aW1BZGV0LCB5ID0gQXJhYmFGaXlhdCkpICsKICBnZW9tX2xpbmUoY29sb3IgPSAiYmx1ZSIpICsKICBsYWJzKHggPSAiVXJldGltIEFkZXQiLCB5ID0gIlNhdMSxxZ8gRml5YXTEsSIpCmBgYAoKYGBge3J9CmxfZml0X2xvZ19kaWZmPC0gbG0oQXJhYmFGaXlhdCB+IEtyZWRpRmFpemkgKyBVcmV0aW1BZGV0K3RybmQsIGRhdGEgPSB0cmFuc2Zvcm1lZF9kaWZmKQpwbG90KGxfZml0X2xvZ19kaWZmKQpzdW1tYXJ5KGxfZml0X2xvZ19kaWZmKQpgYGAKYGBge3J9CndlaWdodHMgPC0gMSAvIGFicyhsX2ZpdF9sb2dfZGlmZiRyZXNpZHVhbHMpCmxfZml0X2xvZ19kaWZmX3dscyA8LSBsbShBcmFiYUZpeWF0IH4gS3JlZGlGYWl6aSArIFVyZXRpbUFkZXQgKyB0cm5kLCBkYXRhID0gdHJhbnNmb3JtZWRfZGlmZiwgd2VpZ2h0cyA9IHdlaWdodHMpCnN1bW1hcnkobF9maXRfbG9nX2RpZmZfd2xzKQpgYGAKCmBgYHtyfQpwbG90KHJlc2lkdWFscyhsX2ZpdF9sb2dfZGlmZikpCmFjZihyZXNpZHVhbHMobF9maXRfbG9nX2RpZmYpKQpwYWNmKHJlc2lkdWFscyhsX2ZpdF9sb2dfZGlmZikpCmBgYAoKYGBge3J9CnRtcD1jb3B5KHRyYW5zZm9ybWVkX2RpZmYpCnRtcFssYWN0dWFsOj1BcmFiYUZpeWF0XQp0bXBbLHByZWRpY3RlZF90cmVuZDo9cHJlZGljdChsX2ZpdF9sb2dfZGlmZl93bHMsdG1wKV0KdG1wWyxyZXNpZHVhbF90cmVuZDo9YWN0dWFsLXByZWRpY3RlZF90cmVuZF0KI2hlYWQodG1wKQpnZ3Bsb3QodG1wICxhZXMoeD10cm5kKSkgKwogICAgICAgIGdlb21fbGluZShhZXMoeT1hY3R1YWwsY29sb3I9J3JlYWwnKSkgKyAKICAgICAgICBnZW9tX2xpbmUoYWVzKHk9cHJlZGljdGVkX3RyZW5kLGNvbG9yPSdwcmVkaWN0ZWQnKSkKYGBgCgoKYGBge3J9CmRhdGFfcGF0aD0iL1VzZXJzL2FobWV0Y2VsaWtlci9EZXNrdG9wL0lFIDM2MCBIVzEvbTFwYXJhYXJ6xLHEsS54bHN4IgoKZGF0YT1yZWFkLnhsc3goZGF0YV9wYXRoKQoKc3RyKGRhdGEpCmBgYAoKYGBge3J9CmNvbnZlcnRfdG9feW1kIDwtIGZ1bmN0aW9uKGRhdGVfc3RyaW5nKSB7CiAgCiAgZm9ybWF0dGVkX2RhdGUgPC0gYXMuRGF0ZShkYXRlX3N0cmluZywgZm9ybWF0ID0gIiVkLSVtLSVZIikKICAKICByZXR1cm4oZm9ybWF0dGVkX2RhdGUpCn0KCgpkYXRhJFRhcmloIDwtIGNvbnZlcnRfdG9feW1kKGRhdGEkVGFyaWgpIAoKaGVhZChkYXRhKQpzdHIoZGF0YSkKCmBgYAoKYGBge3J9CmdncGxvdChkYXRhLCBhZXMoeCA9IFRhcmloLCB5ID0gS3JlZGlLYXJ0xLFIYXJjYW1hKSkgKwogIGdlb21fbGluZShjb2xvciA9ICJibHVlIikKYGBgCgoKCmBgYHtyfQpnZ3Bsb3QoZGF0YSwgYWVzKHggPSBUYXJpaCwgeSA9IFBhcmFBcnrEsSkpICsKICBnZW9tX2xpbmUoY29sb3IgPSAiYmx1ZSIpCmBgYAoKCgoKYGBge3J9CmdncGxvdChkYXRhLCBhZXMoeCA9IFRhcmloLCB5ID0gRWxla3RyaWtUw7xrZXRpbSkpICsKICBnZW9tX2xpbmUoY29sb3IgPSAiYmx1ZSIpCmBgYAoKCgpgYGB7cn0KZGF0YTIgPC0gc3Vic2V0KGRhdGEsIHNlbGVjdCA9IC1UYXJpaCkKCmNvcnJlbF9pbmZvPWNvcihkYXRhMikKCmdnY29ycnBsb3QoY29ycmVsX2luZm8sIAogICAgICAgICAgIGhjLm9yZGVyID0gVFJVRSwgCiAgICAgICAgICAgdHlwZSA9ICJsb3dlciIsCiAgICAgICAgICAgbGFiID0gVFJVRSkKYGBgCgpgYGB7cn0KZ2dwYWlycyhkYXRhKQpgYGAKYGBge3J9CmxfZml0ID0gbG0oS3JlZGlLYXJ0xLFIYXJjYW1hfi4sZGF0YT1kYXRhKQpzdW1tYXJ5KGxfZml0KQpgYGAKCmBgYHtyfQpnZ3Bsb3QoZGF0YSwgYWVzKHg9S3JlZGlLYXJ0xLFIYXJjYW1hLHk9UGFyYUFyesSxKSkgKyBnZW9tX3BvaW50KCkrZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScpCmBgYApgYGB7cn0KZ2dwbG90KGRhdGEsIGFlcyh4PUtyZWRpS2FydMSxSGFyY2FtYSx5PUVsZWt0cmlrVMO8a2V0aW0pKSArIGdlb21fcG9pbnQoKStnZW9tX3Ntb290aChtZXRob2Q9J2xtJykKYGBgCgpgYGB7cn0KcGxvdChsX2ZpdCkKYGBgCgpgYGB7cn0KY2hlY2tyZXNpZHVhbHMobF9maXQpCmBgYAoKCmBgYHtyfQpkYXRhIDwtIGFzLmRhdGEudGFibGUoZGF0YSkKZGF0YVssIHRybmQgOj0gMTouTl0KZGF0YVssYXk6PWFzLmNoYXJhY3Rlcihtb250aChUYXJpaCxsYWJlbD1UKSldCmRhdGFbLCB5aWwgOj0gYXMuY2hhcmFjdGVyKGZvcm1hdChUYXJpaCwgIiVZIikpXQpkYXRhWywgbG9nX1BhcmFBcnrEsSA6PSBsb2coUGFyYUFyesSxKV0KZGF0YVssIGxvZ19LcmVkaUthcnTEsUhhcmNhbWEgOj0gbG9nKEtyZWRpS2FydMSxSGFyY2FtYSldCmhlYWQoZGF0YSkKYGBgCgoKYGBge3J9CgoKbF9maXRfbG9nIDwtIGxtKGxvZ19LcmVkaUthcnTEsUhhcmNhbWEgfiBsb2dfUGFyYUFyesSxICsgRWxla3RyaWtUw7xrZXRpbSAsIGRhdGE9ZGF0YSkKCgpzdW1tYXJ5KGxfZml0X2xvZykKCgpnZ3Bsb3QoZGF0YSwgYWVzKHg9bG9nX1BhcmFBcnrEsSx5PWxvZ19LcmVkaUthcnTEsUhhcmNhbWEpKSArIApnZW9tX3BvaW50KCkgKyAKZ2VvbV9zbW9vdGgobWV0aG9kPSdsbScpCgoKcGxvdChsX2ZpdF9sb2cpCgpgYGAKCmBgYHtyfQpjaGVja3Jlc2lkdWFscyhsX2ZpdF9sb2cpCmBgYApgYGB7cn0KZGF0YSRUcmVuZF8zX0F5bGlrIDwtIHJvbGxtZWFuKGRhdGEkS3JlZGlLYXJ0xLFIYXJjYW1hLCAzLCBmaWxsID0gTkEpCmRhdGEkVHJlbmRfNl9BeWxpayA8LSByb2xsbWVhbihkYXRhJEtyZWRpS2FydMSxSGFyY2FtYSwgNiwgZmlsbCA9IE5BKQoKbF9maXRfdHJlbmQgPC0gbG0obG9nX0tyZWRpS2FydMSxSGFyY2FtYSB+IEVsZWt0cmlrVMO8a2V0aW0rbG9nX1BhcmFBcnrEsSsgVHJlbmRfM19BeWxpayArIFRyZW5kXzZfQXlsaWssIGRhdGE9ZGF0YSkKCgpzdW1tYXJ5KGxfZml0X3RyZW5kKQoKYGBgCgpgYGB7cn0KY2hlY2tyZXNpZHVhbHMobF9maXRfdHJlbmQpCmBgYAoKYGBge3J9CmdncGxvdChkYXRhLCBhZXMoeD1UYXJpaCAsIHkgPSBsb2dfS3JlZGlLYXJ0xLFIYXJjYW1hKSkgKwogIGdlb21fbGluZShjb2xvciA9ICJibHVlIikKYGBgCmBgYHtyfQpnZ3Bsb3QoZGF0YSwgYWVzKHg9VGFyaWggLCB5ID0gbG9nX1BhcmFBcnrEsSkpICsKICBnZW9tX2xpbmUoY29sb3IgPSAiYmx1ZSIpCmBgYAoKYGBge3J9CmxfZml0X3RyZW5kX2NhdGhlZ29yaWNhbCA8LSBsbShsb2dfS3JlZGlLYXJ0xLFIYXJjYW1hIH4gRWxla3RyaWtUw7xrZXRpbStsb2dfUGFyYUFyesSxKyBUcmVuZF8zX0F5bGlrICsgVHJlbmRfNl9BeWxpaytheSt5aWwsIGRhdGE9ZGF0YSkKc3VtbWFyeShsX2ZpdF90cmVuZF9jYXRoZWdvcmljYWwpCmBgYAoKYGBge3J9CmNoZWNrcmVzaWR1YWxzKGxfZml0X3RyZW5kX2NhdGhlZ29yaWNhbCkKYGBgCmBgYHtyfQoKZGF0YSRLcmVkaUthcnTEsUhhcmNhbWFfNF9BeWxpa19HZWNpa21lbGkgPC0gbGFnKGRhdGEkS3JlZGlLYXJ0xLFIYXJjYW1hLCA0KQpkYXRhJEtyZWRpS2FydMSxSGFyY2FtYV82X0F5bGlrX0dlY2lrbWVsaSA8LSBsYWcoZGF0YSRLcmVkaUthcnTEsUhhcmNhbWEsIDYpCmhlYWQoZGF0YSkKbF9maXRfZ2VjaWttZWxpIDwtIGxtKGxvZ19LcmVkaUthcnTEsUhhcmNhbWEgfiBFbGVrdHJpa1TDvGtldGltICsgbG9nX1BhcmFBcnrEsSArIEtyZWRpS2FydMSxSGFyY2FtYV82X0F5bGlrX0dlY2lrbWVsaStUcmVuZF8zX0F5bGlrICtheSt5aWwsIGRhdGE9ZGF0YSkKCgpzdW1tYXJ5KGxfZml0X2dlY2lrbWVsaSkKCmBgYAoKYGBge3J9CmNoZWNrcmVzaWR1YWxzKGxfZml0X2dlY2lrbWVsaSkKYGBgCmBgYHtyfQpsX2ZpdF9nZWNpa21lbGkgPC0gbG0obG9nX0tyZWRpS2FydMSxSGFyY2FtYSB+IGxvZyhFbGVrdHJpa1TDvGtldGltKSArIGxvZ19QYXJhQXJ6xLEgKyBLcmVkaUthcnTEsUhhcmNhbWFfNl9BeWxpa19HZWNpa21lbGkgKyBUcmVuZF8zX0F5bGlrICsgYXkgKyB5aWwsIGRhdGE9ZGF0YSkKc3VtbWFyeShsX2ZpdF9nZWNpa21lbGkpCmBgYApgYGB7cn0KY2hlY2tyZXNpZHVhbHMobF9maXRfZ2VjaWttZWxpKQpgYGAKCgoKCgoK